package org.example.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import org.apache.ibatis.annotations.Param;
import org.example.domain.dto.PageDTO;
import org.example.domain.po.ErpAccount;
import org.example.domain.po.ErpAccountHead;
import org.example.domain.po.ErpDepotHead;
import org.example.domain.query.report.*;
import org.example.domain.vo.report.account.AccountBillVO;
import org.example.domain.vo.report.account.BaseAccountHead;
import org.example.domain.vo.report.account.ErpAccountVO;
import org.example.domain.vo.report.allocate.AllocateDepot;
import org.example.domain.vo.report.inDetail.Menyimpan;
import org.example.domain.vo.report.inOutStockReport.InOutStockReport;
import org.example.domain.vo.report.materialStock.ErpMaterialStockVO;
import org.example.domain.vo.report.ErpReport;
import org.example.domain.vo.report.materialStock.InventoryFlows;
import org.example.domain.vo.report.materialStock.billDetail.BaseInventory;
import org.example.domain.vo.report.retail.RetailStatistics;
import org.example.domain.vo.report.stock_warning.StockWarningReport;
import org.example.domain.vo.report.summary.StorageSummary;

import java.util.List;

public interface ErpReportService extends IService<ErpReport> {
    PageDTO<ErpMaterialStockVO> findMaterialStock(StockQuery stockQuery);
    
    IPage<InventoryFlows> findMaterialBill(MaterialBillQuery materialBillQuery);
    
    ErpDepotHead getDeportHeadByNumber(String headNumber);
    
    BaseInventory getDetail(String number);

    IPage<ErpAccountVO> pageFindAccount(AccQuery accQuery);

    List<AccountBillVO> findAccountBill(Long accId, Long tenantId);
    
    BaseAccountHead getAccountHeadDetail(Long tenantId, String headNumber, String subType);
    
    IPage<RetailStatistics> findRetailStatistics(RetailStatisticsQuery query);
    
    IPage<RetailStatistics> findPurchaseStatistics(RetailStatisticsQuery query);
    
    IPage<RetailStatistics> findSaleStatistics(RetailStatisticsQuery query);
    
    IPage<Menyimpan> findMenyimpanPage(InDetailQuery inDetailQuery);
    
//    IPage<Menyimpan> findAllocateDepotPage(AllocateDepotQuery query);
    
    IPage<StorageSummary> findStorageSummaryPage(StorageSummaryQuery query);
    
    IPage<InOutStockReport> findInOutStockReportPage(InOutStockReportQuery query);
    
    IPage<AllocateDepot> findAllocateDepotPage(AllocateDepotQuery query);
    
    IPage<StockWarningReport> findStockWarning(InOutStockReportQuery query);
}
